import './hyl/core/safe/sm2.js';
import './hyl/core/safe/sm3.js';
import './hyl/core/safe/sm4.js';
import { _lstore, _sstore } from './hyl/base/html/store.js';
import './hyl/core/fun.js';
!function(y, e) { "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (y = "undefined" != typeof globalThis ? globalThis : y || self).Mm = e() }
	(this, function() {
		var store = _lstore;
		var f = { urls: {}, sessionkey: "" };


		f.read公钥 = function() {
			return store.getItem(f.sessionkey + "-公钥");
		};
		f.write公钥 = function(公钥) {
			store.setItem(f.sessionkey + "-公钥", 公钥);
		}
		f.do生成SM4密钥 = function() {
			var 密钥 = _Fun.g生成十六进制字符串(32);
			store.setItem(f.sessionkey + "-sm4", 密钥);
			return 密钥;
		}
		f.readSM4 = function() {
			return store.getItem(f.sessionkey + "-sm4");
		};

		f.sm2公钥加密 = function(明文) {
			var gy = store.getItem(f.sessionkey + "-公钥");
			//console.log(明文, gy)
			return sm2.doEncrypt(明文, gy);
		}

		f.sm4加密 = function(明文) {
			var k = store.getItem(f.sessionkey + "-sm4");
			return sm4.encrypt(明文, k);
		}
		f.sm4解密 = function(密文) {
			var k = store.getItem(f.sessionkey + "-sm4");
			return sm4.decrypt(密文, k);
		}

		f.sm3哈希 = function(明文) {
			return sm3(明文);
		}

		f.f验证表单 = function(key, val, 异常回调) {
			if (!val) {
				异常回调 && 异常回调(key + '不能为空');
				return true;
			} else if (!_Fun.is有效字符串(val)) {
				异常回调 && 异常回调(key + '不是有效字符串');
				return true;
			}
			return false;
		}
		f.f刷新 = function(SessionKey, v_URLs) {

			f.sessionkey = SessionKey;
			f.urls = Object.assign(f.urls, v_URLs);
		}

		f.f准备 = function(SessionKey, v_URLs, 连接成功回调) {
			f.sessionkey = SessionKey;
			f.urls = Object.assign(f.urls, v_URLs);
			/*	if (f.readSM4()) {
					return;
				}*/
			_Fun.url(f.urls.URL_DAO_PUBLICKEY, {}, function(dtext) {
				var dd1 = JSON.parse(dtext);
			//	console.log("请求公钥", dtext);
				f.write公钥(dd1.msg);//把公钥保存到本地
				//	console.log("请求公钥2", f.read公钥());
				var key = f.do生成SM4密钥(); //本地生成新的sm4密钥 
				//	console.log("请求sm4", key);
				var key1 = f.sm2公钥加密(key); //用公钥加密这个密钥 给服务器
				//	console.log("请求sm4-2", key1);
				_Fun.postJson(f.urls.URL_DAO_KEY, {}, { "key": key1 }, function(data) {
					var dd = JSON.parse(data);
					//console.log("上传sm4key", data);
					if (dd.code == 1) {
						//e能否提交=true;
						连接成功回调 && 连接成功回调();
					}
				});
			});
		};
		f.do开启倒计时按钮 = function(按钮, 倒计时, 结束时回调) {
			// 设置倒计时时间（单位：秒）


			// 获取按钮元素
			const btn = document.getElementById(按钮);
			const btntext = btn.innerHTML;
			btn.disabled = true;
			const bgcolor = btn.style.backgroundColor;
			console.log("点击按钮")
			btn.style.backgroundColor = "#ccc";

			// 创建计时器函数
			const countdown = () => {
				// 显示倒计时时间

				btn.innerHTML = btntext + " (" + 倒计时-- + ")";

				// 判断是否到达零
				if (倒计时 === 0) {
					// 停止倒计时，并执行所需操作
					clearInterval(intervalId);
					btn.disabled = false;
					btn.innerHTML = btntext;
					btn.style.backgroundColor = bgcolor;
					结束时回调 && 结束时回调();
					// 这里可以执行其他操作，如提交表单、发送请求等。
				}
			};

			// 每隔一秒钟调用一次计数器函数
			const intervalId = setInterval(countdown, 1000);
		}

		f.f获取验证码 = function(tel, mail, 成功回调, 异常回调) {

			if (!tel && !mail) {
				异常回调 && 异常回调('邮箱或手机不能为都为空');
			}
			var param = {};
			if (mail && _Fun.isEmail(mail)) {
				param.mail = mail;
			} else if (tel && _Fun.isPhone(tel)) {
				param.tel = tel;
			} else {
				异常回调 && 异常回调('手机和邮箱格式都不正确');
			}
			_Fun.postJson(f.urls.URL_DAO_REGMCODE, { HYLSessionKey: HYLTokeId }, param, function(dtext) {
				var dd = JSON.parse(dtext);
				if (dd.code == 1) {
					成功回调 && 成功回调(dd.msg);
				}
			}, function(code, error) {
				异常回调 && 异常回调({ code: code, err: error });
			});
		};

		f.f注册 = function(param, 成功回调, 异常回调) {
			if (f.f验证表单("用户名", param.uname, 异常回调)) {
				return 1;
			}
			if (f.f验证表单("电子邮箱", param.umail, 异常回调)) {
				return 2;
			}

			if (f.f验证表单("密码", param.upwd, 异常回调)) {
				return 3;
			}
			if (f.f验证表单("重复密码", param.upwd_c, 异常回调)) {
				return 4;
			}
			if (param.upwd != param.upwd_c) {
				异常回调 && 异常回调(key + '重复密码与密码不等');
				return 5;
			}
			param.upwd = md5(param.upwd);
			delete param.upwd_c;
			let str2 = f.sm4加密(JSON.stringify(param));
			let data = { "mm": str2 };
			//console.log("加密后参数", param)
			_Fun.postJson(f.urls.URL_DAO_REG, { HYLSessionKey: HYLTokeId }, data, function(dtext) {
				var dd = JSON.parse(dtext);
				if (dd.code == 1) {
					//跳转到main页面				
					成功回调 && 成功回调(dtext);
					window.location = f.urls.URL_LOGIN;
				} else {
					异常回调 && 异常回调(dd.msg);
				}
			}, function(code, error) {
				异常回调 && 异常回调({ code: code, err: error });
				//console.log({ code: code, err: error });
			});

		}


		f.f重置密码 = function(邮件, 密码, 密码2, 成功回调, 异常回调) {
			if (f.f验证表单("邮箱", 邮件, 异常回调)) {
				return;
			}
			if (f.f验证表单("密码", 密码, 异常回调)) {
				return;
			}
			if (f.f验证表单("重置密码", 密码2, 异常回调)) {
				return;
			}
			if (密码 != 密码2) {
				异常回调 && 异常回调('重复密码与密码不等');
				return 5;
			}
			let 密码1 = md5(密码);
			console.log("密码", 密码, 密码1);
			let str2 = f.sm4加密(邮件 + "," + 密码1);
			let data = { "mm": str2 };
			_Fun.postJson(f.urls.URL_RSPADSS, { HYLSessionKey: HYLTokeId }, data, function(dtext) {
				var dd = JSON.parse(dtext);
				if (dd.code == 1) {
					//跳转到main页面				
					成功回调 && 成功回调(dtext);
				} else {
					异常回调 && 异常回调(dd.msg);
				}
			}, function(code, error) {
				异常回调 && 异常回调({ code: code, err: error });
				//console.log({ code: code, err: error });
			});
		}
		f.f登录 = function(uname, upass, 成功回调, 异常回调) {
			if (f.f验证表单("用户名", uname, 异常回调)) {
				return;
			}
			if (f.f验证表单("密码", upass, 异常回调)) {
				return;
			}

			let md5pass = md5(upass);
			console.log("密码", upass, md5pass);
			let str = _Fun.join(uname, ',', md5pass);
			str = f.sm4加密(str);
			let param = { "mm": str };
			//console.log("加密后参数", param)
			_Fun.postJson(f.urls.URL_DAO_LOGIN, { HYLSessionKey: HYLTokeId }, param, function(dtext) {
				console.log("登录后", dtext)
				成功回调 && 成功回调(dtext);
				var dd = JSON.parse(dtext);
				if (dd.code == 1) {
					//跳转到main页面
					//console.log("注册后", dd.code, dd.msg)
					成功回调 && 成功回调(dd.code, dd.msg)
					window.location = f.urls.URL_MAIN;
				} else {

					异常回调 && 异常回调(dd.msg);
				}
			}, function(状态, error) {
				异常回调 && 异常回调({ code: 状态, err: error });
				//console.log({ code: code, err: error });
			});

			/*setTimeout(() => {
				this.$notify({
					title: '没得办法就这一页',
					message: '自己点 “X” 吧！',
					position: 'top-left'
				});
			}, 2000);*/

		};



		return f;
	});
